//
// Created by nsy on 2020/11/20.
//

_Pragma("once")
#include "common_shader.h"

class ColorMapping : public CommonShader {
public:

    ColorMapping();

    /**
     * 设置输入点云
     * @param[input] cloud
     * @return
     */
    void setInputCloud(PointCloudPtr cloud) override;

/**========================================================================/
 * 单个相机上色
 * =======================================================================*/

        /**
         * 设置相机
         * @param[input] camera
         * @return
         */
        void setCamera(CameraInfo camera);

        /**
         * 颜色映射
         * @param[output] out
         * @param[input] check_occluded 是否检测阻挡，默认不检测
         * @return
         */
        void colorMapping(PointCloudRGB &out, bool check_occluded=false);


/**========================================================================/
 * 多个相机上色
 * =======================================================================*/

        /**
         * 添加相机信息
         * @param[input] camera
         * @return
         */
        void pushBackCamera(CameraInfo camera);

        /**
         * 设置相机列表
         * @param[input] camera_list
         * @return
         */
        void setCameraList(CameraList camera_list);

        /**
         * 多相机颜色映射
         * @param[output] out
         * @return
         */
        void colorMappingMultiCamera(PointCloudRGB &out);

    protected:

        /** 映射中的相机信息 */
        CameraInfo camera_;

        /** 映射中的相机列表信息 */
        CameraList camera_list_;

        /** 相机到各点距离距离以及各点的颜色 */
        struct Distance{
            float distance;
            uint8_t r;
            uint8_t g;
            uint8_t b;
        };
};

